package study2;

public abstract class HotDrink {
    // 制作流程是标准化的，封装到父类中
    //子类只能使用不能修改
    public final void prepareRecipe(){
        boilWater();
        brew();
        pourInCup();
        //考虑部分人不需要加调料  设置钩子函数  默认加  子类若不要 复写即可
        if (isCustomerWantCondiments()) {
            addCondiments();
        }
    }
    //不同饮品此方式细节不同，具体到子类实现
    public  abstract void brew();
    public  abstract void addCondiments();
    //相同的步骤在父类中实现
    public void pourInCup(){
        System.out.println("pouring into cup");
    }
    public void boilWater(){
        System.out.println("boiling water");
    }

    public boolean isCustomerWantCondiments(){
        return true;
    }
}
